import myAxios from '../myAxios/myAxios.js';
import myAxios28 from '../myAxios/myAxios28.js';

import myArr from '../myAxios/myArr.js';
let { GetNumber } = myArr;

import { GetPlanedCountTableFromMes } from './GetPlanedCountTableFromMes.js';
let GetPlanedCountTable = async function (matnrString) {
	// 初始化结果数组，模拟 C# 中的 DataTable
	const planedData = []; // 我们将返回一个对象数组，例如 [{ MATNR: '...', PLANED_COUNT: ... }, ...]

	// 将逗号分隔的字符串转换为物料号数组
	const matnrList = matnrString.split(',');

	// 1. 从 SAP 获取数据 (替换为您的实际 SAP 数据获取函数)
	let sapRawData = []; // 假设获取到的原始 SAP 数据是一个对象数组
	sapRawData = (await myAxios.getSap("SAP开始未结束订单（物料号%）已释放", "Q902🈹", "9911")).TableSet['返回表'];
	// 从 MES 数据库查询已排产数量
	const aufnrStr = sapRawData.map(row => `${row.AUFNR}`).join(',');
	let mesResult = await GetPlanedCountTableFromMes(aufnrStr);
	// 2. 遍历每个物料号
	for (let i = 0; i < matnrList.length; i++) {
		const currentMatnr = matnrList[i].trim(); // 去除可能的空格

		// 在 SAP 数据中筛选出当前物料号的所有行 (模拟 C# 的 DataTable.Select)
		const dataRows = sapRawData.filter(row => row.MATNR === currentMatnr);

		// 提取 AUFNR (订单号) 列表
		const aufnrList = dataRows.map(row => row.AUFNR);

		// 如果找不到该物料号的任何数据，可以跳过或记录，这里我们继续循环
		if (aufnrList.length === 0) {
			// console.warn(`未找到物料号 ${currentMatnr} 的 SAP 数据`);
			continue;
		}

		let mesPlanCount = 0; // MES 已排产数量
		let sapInSum = 0;     // SAP 入库数量总和

		// 3. 从 MES 数据库查询已排产数量 (替换为您的实际数据库查询函数)
		mesPlanCount = mesResult.reduce((sum, row) => {
			if (row.MATNR === currentMatnr) {
				return sum + GetNumber(row.WOSCHEDULEQTY);
			}
			else {
				return sum;
			}
		}, 0);
		// 将 AUFNR 列表转换为 SQL 查询中 IN 子句所需的字符串格式(原逻辑)
		// const aufnrStr1 = aufnrList.map(aufnr => `'${aufnr}'`).join(',');
		// let mesResult = await myAxios.get('陈帅廷查询周计划_MES已排产数量', `${aufnrStr1}`, 'Q902');
		// mesPlanCount = mesResult.reduce((sum, row) =>  sum + GetNumber(row.WOSCHEDULEQTY), 0);
		// 计算 MES 已排产数量总和 (模拟 C# 中的 Sum)

		// console.log('mesPlanCount :>> ', mesPlanCount);


		// 4. 计算 SAP 入库数量总和
		sapInSum = dataRows.reduce((sum, row) => sum + GetNumber(row.WEMNG), 0);

		// 5. 计算计划数量
		const count = mesPlanCount - sapInSum;

		// 6. 如果计划数量大于 0，则添加到结果数组中
		if (count > 0) {
			planedData.push({
				MATNR: currentMatnr,
				PLANED_COUNT: count
			});
		}
	}

	// 7. 返回最终结果
	console.log('GetPlanedCountTable :>> ', planedData);
	return planedData;
};


export {
	GetPlanedCountTable
};